package MRDemo;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;
import java.math.BigDecimal;

public class mapDemo extends Mapper<LongWritable, Text, Text, bean> {
    Text DeviceID = new Text();

    // 重写map操作，将数据读取到，然后处理传递到reduce
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, bean>.Context context)
            throws IOException, InterruptedException {
        /*
         * 1、获得每一行的数据，将Text类型的数据转化为String类型进行操作
         * 2、通过将转换好的数据进行切割生成一组String类型的数组
         * 3、获得到需要的每一个数据(device_id,price_self,price_other)
         * 4、在传递数据到下一个阶段前，做数据类型转换
         * 5、将获得到的数据作为key进行传递；将处理好的数据做为value进行传递，value类型为bean类型
         * 6、将准备好的数据往下一个阶段传递
         */
        //下列两行操作，将每一行数据进行切割
        String str = value.toString();
        String[] strArr = str.split(" ");

        //获得到需要的数据
        String device_id = strArr[strArr.length - 1];
        String price_self_string = strArr[strArr.length - 3];
        String price_other_string = strArr[strArr.length - 2];

        //转换数据类型
        BigDecimal price_self = new BigDecimal(price_self_string);
        BigDecimal price_other = new BigDecimal(price_other_string);

        //传递key类型，将device_id由String类型转换成为Text类型
        DeviceID.set(device_id);
        //创建value的类型
        bean bean = new bean(device_id, price_self, price_other);

        //将准备好的数据往下一个阶段传递
        context.write(DeviceID, bean);
    }
}
